package com.ruoyi.system.service;

import com.ruoyi.common.core.domain.entity.AppUser;
import com.ruoyi.system.domain.qo.UserListQo;
import com.ruoyi.system.domain.vo.AppUserVO;
import com.ruoyi.system.domain.vo.IndexVo;
import com.ruoyi.system.domain.vo.UserAdminListVO;

import java.util.List;
import java.util.Map;

/**
 * 用户信息 服务层
 *
 * @author ruoyi
 */
public interface IAppUserService {
    /**
     * 查询用户信息
     *
     * @param id 用户ID
     * @return 用户信息
     */
    AppUser selectAppUserById(Long id);

    /**
     * 查询用户列表
     *
     * @param appUser 用户信息
     * @return 用户集合
     */
    List<AppUser> selectAppUserList(AppUser appUser);

    /**
     * 查询应用用户列表
     *
     * @return 应用用户列表
     */
    List<AppUserVO> selectUserList(UserListQo userListQo);

    /**
     * 查询应用用户列表
     *
     * @return 应用用户列表
     */
    List<UserAdminListVO> selectUserAdminList(UserListQo userListQo);

    /**
     * 新增用户
     *
     * @param appUser 用户信息
     * @return 结果
     */
    int insertAppUser(AppUser appUser);

    /**
     * 修改用户
     *
     * @param appUser 用户信息
     * @return 结果
     */
    int updateAppUser(AppUser appUser);

    /**
     * 删除用户信息
     *
     * @param id 用户ID
     * @return 结果
     */
    int deleteAppUserById(Long id);

    /**
     * 批量删除用户信息
     *
     * @param ids 需要删除的用户ID
     * @return 结果
     */
    int deleteAppUserByIds(Long[] ids);

    /**
     * 获取服务用户数量
     *
     * @return 服务用户数量
     */
    Map<String, Long> getServiceUserCount();

    /**
     * 按小时统计当天的预警信息
     *
     * @return 预警统计信息
     */
    Map<String, List<IndexVo>> countUserByHour();

    /**
     * 按天统计当月的预警信息
     *
     * @return 预警统计信息
     */
    Map<String, List<IndexVo>> countUserByDay();


    /**
     * 重置用户密码
     *
     * @param id       用户id
     * @param password 密码
     * @return 结果
     */
    int updatePwd(Long id, String password);
}